From: Florian Müllner Date: Wed, 3 Aug 2022 04:44:36 +0000 (+0200) Subject: status/network: Add activate() to NMDeviceItem X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~461^2^2~46 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=be98e5b3143caf6a140f6478c3776b18fdf131f7;p=gnome-shell.git status/network: Add activate() to NMDeviceItem DeviceItems are sections, and therefore not actually activatable. However when we port to quick settings, those toggles will need to do *something*. For that reason, provide an activate() implementation that 1. deactivates the device if currently connected 2. delegates the action to the most-recently used item, the first visible item or the auto-connect item (in that order) Part-of: --- diff --git a/js/ui/status/network.js b/js/ui/status/network.js index 39a89e93d..1beab28c1 100644 --- a/js/ui/status/network.js +++ b/js/ui/status/network.js @@ -499,6 +499,29 @@ const NMDeviceItem = GObject.registerClass({ this._addConnection(conn); } + _getActivatableItem() { + const [lastUsed] = this._itemSorter.itemsByMru(); + if (lastUsed?.timestamp > 0) + return lastUsed; + + const [firstItem] = this._itemSorter; + if (firstItem) + return firstItem; + + console.assert(this._autoConnectItem.visible, + `${this}'s autoConnect item should be visible when otherwise empty`); + return this._autoConnectItem; + } + + activate() { + super.activate(); + + if (this._activeConnection) + this.deactivateConnection(); + else + this._getActivatableItem()?.activate(); + } + activateConnection(connection) { this._client.activate_connection_async(connection, this._device, null, null, null); }